import java.util.*;

public class Test {
    public static void main(String[] args) {
        /* 1. 基本 CRUD 演示 */
        LinkedList<String> list = new LinkedList<>();
        list.add("apple");          // 尾部追加
        list.addFirst("banana");    // 头部插入（独有）
        list.addLast("pear");       // 尾部插入（等价 add）
        list.add(1, "orange");      // 指定下标插入

        System.out.println("初始链表: " + list);   // [banana, orange, apple, pear]

        System.out.println("getFirst: " + list.getFirst()); // banana
        System.out.println("getLast : " + list.getLast());  // pear

        list.removeFirst();         // 弹出头
        list.removeLast();          // 弹出尾
        System.out.println("弹完头尾: " + list);   // [orange, apple]

        /* 2. 当队列用（FIFO） */
        LinkedList<Integer> queue = new LinkedList<>();
        queue.offer(1);      // 入队
        queue.offer(2);
        System.out.println("队列出队: " + queue.poll()); // 1
        System.out.println("队列剩余: " + queue);        // [2]

        /* 3. 当栈用（LIFO） */
        LinkedList<Integer> stack = new LinkedList<>();
        stack.push(10);      // 压栈
        stack.push(20);
        System.out.println("栈弹顶: " + stack.pop()); // 20
        System.out.println("栈剩余: " + stack);      // [10]

        /* 4. 遍历与数组转换（同 ArrayList） */
        for (String s : list) System.out.print(s + " ");
        System.out.println();

        String[] arr = list.toArray(new String[0]);
        System.out.println("数组: " + Arrays.toString(arr));
    }
}
// LinkedList 常用方法速查表
// | 目的       | 方法                                               | 示例                                          |
// | -------- | ------------------------------------------------ | ------------------------------------------- |
// | 头插       | `void addFirst(E e)` / `boolean offerFirst(E e)` | `list.addFirst("A");`                       |
// | 尾插       | `void addLast(E e)` / `boolean offerLast(E e)`   | `list.addLast("Z");`                        |
// | 头删       | `E removeFirst()` / `E pollFirst()`              | `String f = list.removeFirst();`            |
// | 尾删       | `E removeLast()` / `E pollLast()`                | `String l = list.removeLast();`             |
// | 查看头      | `E getFirst()` / `E peekFirst()`                 | `String head = list.peekFirst();`           |
// | 查看尾      | `E getLast()` / `E peekLast()`                   | `String tail = list.peekLast();`            |
// | 压栈（LIFO） | `void push(E e)`                                 | `stack.push(42);`                           |
// | 弹栈       | `E pop()`                                        | `int top = stack.pop();`                    |
// | 入队（FIFO） | `boolean offer(E e)`                             | `queue.offer(1);`                           |
// | 出队       | `E poll()`                                       | `Integer x = queue.poll();`                 |
// | 通用增删改查   | 同 ArrayList 表                                    | `add/remove/get/set/contains/indexOf…` 完全一致 |
